package oyente;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import logica.LogicaMario;
import personaje.*;

/**
 * Clase utilizada para implementar un oyente de teclado que se encarga de
 * enviarle mensajes a mario segun la tecla presionada.
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */
public class Manejo implements KeyListener {

	/** mario */
	private Mario mario;

	/** procesador de teclas */
	private ProcesadorTeclas procesador;
	/** Condicion de corte del teclado*/
	private boolean tecladoDesactivado;

	/**
	 * Constructor de manejo
	 * 
	 * Se encarga de crear el procesador de teclas e iniciarlo
	 * 
	 * @param mario
	 */
	public Manejo(Mario m) {
		mario = m;
		tecladoDesactivado = false;
		procesador = new ProcesadorTeclas(50, null, mario);
		procesador.start();
		procesador.setLastKey(KeyEvent.VK_RIGHT); // inicia mirando a la derecha
	}

	// Comandos

	/**
	 * Posicion actual de Mario
	 */
	@SuppressWarnings("unused")
	private void posicionActual() {
		System.out.println("Posicion actual : "
				+ mario.getCasilleroActual().getX() + " "
				+ mario.getCasilleroActual().getY());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyPressed(KeyEvent k) {
		if (!tecladoDesactivado) {
			if ((k.getKeyCode() == KeyEvent.VK_UP)
					|| (k.getKeyCode() == KeyEvent.VK_LEFT)
					|| (k.getKeyCode() == KeyEvent.VK_RIGHT)
					|| (k.getKeyCode() == KeyEvent.VK_SPACE)) {
				procesador.setTecla(k.getKeyCode(), true);
				// posicionActual();

			}
		}

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyReleased(KeyEvent k) {
		if (!tecladoDesactivado) {
			if (k.getKeyCode() == KeyEvent.VK_UP) {
				LogicaMario logica = (LogicaMario) mario.getControl();
				logica.setSaltando(false);
			}

			if (procesador.getLast() == KeyEvent.VK_LEFT) {
				mario.getNivel().getGrafica().getPanelMario().izquierda();
				procesador.setLastKey(KeyEvent.VK_LEFT);
			} else if (procesador.getLast() == KeyEvent.VK_RIGHT) {
				mario.getNivel().getGrafica().getPanelMario().derecha();
				procesador.setLastKey(KeyEvent.VK_RIGHT);
			}

			if ((k.getKeyCode() == KeyEvent.VK_UP)
					|| (k.getKeyCode() == KeyEvent.VK_LEFT)
					|| (k.getKeyCode() == KeyEvent.VK_RIGHT)
					|| (k.getKeyCode() == KeyEvent.VK_SPACE)) {
				procesador.setTecla(k.getKeyCode(), false);
			}
			
		}

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyTyped(KeyEvent arg0) {

	}
	/**
	 * Metodo utilizado para desactivar el teclado
	 */
	public void desactivarTeclado() {
		tecladoDesactivado = true;
		procesador.stop();
	}
	/**
	 * Metodo que retorna la ultima tecla presionada
	 * @return ultima tecla
	 */
	public int getLastKey() {
		return procesador.getLast();
	}

}
